\documentclass[a4paper,11pt]{article}

\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{comment}
\usepackage[plain]{fullpage}
\usepackage{url}
\usepackage{cite}
\usepackage{todonotes}
%\usepackage[disable]{todonotes}

\usepackage{enumerate}

\usepackage{listings}

\lstset {%
     language=Prolog,
     frame=l,
     framerule=1pt,
     aboveskip=1em,
     framextopmargin=3pt,
     framexbottommargin=3pt,
     framexleftmargin=0.4cm,
     framesep=0pt,
     rulesep=.4pt,
     %~ backgroundcolor=\color{gris95},
     rulesepcolor=\color{red},
     tabsize=4,
     %
     stringstyle=\sffamily,
     showstringspaces = false,
     basicstyle=\footnotesize\sffamily,
     identifierstyle=,
     %commentstyle=\sffamily\color{gris50},
     keywordstyle=\bfseries,
     %commentstyle=\scriptsize, %\scriptsize\sffamily,
     breaklines=true,
     breakatwhitespace=true,
     morekeywords={setof},
     morecomment=[l][\ttfamily\scriptsize]{\%},
     morecomment=[l][\color{blue}\tiny]{\%\%\%},
   }

\begin{document}
 
\section*{EJ 3}
\subsection*{Resolucion}
\subsubsection*{Mensajes enviados}
\begin{enumerate}[1)]
	\item Mensaje new: a ContadorFlexible
	\item Mensaje new a ContadorFlexible, devuelve instanciaNuevaContadorFlexible
	\item Mensaje new a ContadorFlexible, devuelve instanciaNuevaContadorFlexible
	\item Mensaje inicializar: a instanciaNuevaContadorFlexible (instancia devuelta del punto anterior), devuelve instanciaNuevaContadorFlexible
	\item Mensaje usarBloque: a instanciaNuevaContadorFlexible, devuelve instanciaNuevaContadorFlexible
	\item avanzarSi a instanciaNuevaContadorFlexible
	\item ifTrue: ifFalse: a true
	\item value a [self proximo]
	\item proximo a instanciaNuevaContadorFlexible
	\item value: a [v $\vert$ v + 2]
	\item + a 0
	\item inicializar: a instanciaNuevaContadorFlexible
\end{enumerate}

\subsubsection*{Retorno de los mensajes}
\begin{enumerate}[1)]
	\item instanciaNuevaContadorFlexible
	\item instanciaNuevaContadorFlexible
	\item instanciaNuevaContadorFlexible 
	\item instanciaNuevaContadorFlexible
	\item instanciaNuevaContadorFlexible
	\item 2
	\item 2
	\item 2
	\item 2
	\item 2
	\item 2
	\item instanciaNuevaContadorFlexible
\end{enumerate}

\section*{Parcial de prolog de los triangulines}
\lstinputlisting{parcialDeTRiangulosEnProlog.pl}


\section*{Cosas de EsmolToc que esperemos nunca usar}

Ejercicio  12 de la práctica
\begin{lstlisting}
BlockClosure >> generarBloqueInfinito: condiciones
	^ BlockClosure bloqInfDesde: 1.
	
BlockClosure >> bloqInfDesde: n
	^ [Array with: n with (BlockClosure bloqInfDesde: (n+1))].
\end{lstlisting}


Ejercicio  13 de la práctica
\begin{lstlisting}
Collection >> dameUno
	^ self anyOne
	
Collection >> anyOne
	self emptyCheck.
	self do: [:each | ^each].
\end{lstlisting}

\begin{lstlisting}
Collection >> vaciar
	self removeAll
	
Collection >> removeAll
	self do: [:each | self remove: each].

Collection >> remove: object
	self remove: object ifAbsent: [self errorNotFoundObj].
\end{lstlisting}

\begin{lstlisting}
Collection >> mejorSegun: elector
	"^self inject: self anyOne into: elector. <-- vale"
	^self inject: self anyOne into: [:eleccion :each | elector value: eleccion value: each].
	
Collection >> inject: thisValue into: binaryBlock
	|nextValue|
	nextValue := thisValue.
	self do: [:each | nextValue := binaryBlock value: nextValue value: each].
	^ nextValue.
\end{lstlisting}

\begin{lstlisting}
BlockClosure >> prioritarioSegun: condiciones
	|max| 
	^ self inject: self anyOne into: [:max :each | (condiciones sumarizarPredicadosValidos: max) max: (condiciones sumarizarPredicadosValidos :each)].
	
Collection >> sumarizarPredicadosValidos: valor
	|sum|
	sum := 0.
	self do: [:each | (each value: valor) ifTrue: [sum:= sum+1]].
	^ sum.
\end{lstlisting}

\end{document}

